#include <iostream>

using namespace std;

//类模板与函数模板区别主要有两点：
//1. 类模板没有自动类型推导的使用方式
//2. 类模板在模板参数列表中可以有默认参数
template<typename NameType, typename AgeType=int>
class Person {
public:
    NameType name;
    AgeType age;

    Person(NameType name, AgeType age) {
        this->name = name;
        this->age = age;
    }

    void showPerson() {
        cout << "name:" << this->name << ",age:" << this->age << endl;
    }
};

void test1() {
    //Person p("张三",18);// 错误 类模板使用时候，不可以用自动类型推导
    Person<string, int> p("张三", 18);//必须使用显示指定类型的方式，使用类模板
    p.showPerson();
}

void test2() {
    Person<string> p("李四", 19);//类模板中的模板参数列表 可以指定默认参数
    p.showPerson();
}

int main() {
    test1();
    test2();
    return 0;
}